Q.A  PIC32MZ評価ボード




Q.  評価ボードを購入しないでサンプルソフトを使用する場合 何か制約がありますか?
A.  ありません。 評価ボードを購入しないでご自分でハードを製作されてご使用になっても結構です。
 尚、サンプルソフトの中に評価ボードを購入しないと <解説>の閲覧 と プロジェクトファイルがダウンロードできないものがあります。 具体的にはサンプルソフトの一覧表の中で背景色が灰色()になっているサンプルソフトがこの対象となっています。 ( → URL)

 


 Q.  サンプルソフト(プロジェクトファイル)はどのフォルダにコピーしてつかうのですか?
 A.
① ハーモニーがインストールしてある"C:\microchip\harmony\v2_04\app"フォルダーに下に3階層(注)のサブフォルダーをつくります。
  フォルダー名は英数字のユーザーがわかりやすい分類名をつけます。 以下の例は_myWork、sample、Basicと命名した場合です

  "C:\microchip\harmony\v2_04\apps\_myWork\sample\Basic"

② サンプルのプロジェクトファイルをダウンロードして解凍します。 ここでは例として"SP I 制御によるフラッシュメモリ読み書き"から
  032 SPI Flash RW Dynamic_SPI.zipをダウンロードします。解凍すると以下のようなフォルダとなります。

  "032 SPI Flash RW Dynamic_SPI\032 SPI Flash RW Dynamic_SPI\firmware\……"


③ ②の青字部のフォルダを①のBasicフォルダの下位フォルダとします。

  "C:\microchip\harmony\v2_04\apps\_myWork\sample\Basic
                        \032 SPI Flash RW Dynamic_SPI\firmware\
……"



  (注)3階層を2階層や4階層など異なった階層にしてしまうとコンパイルできません。
     ★ 他の階層で使いたい場合 → URL
    但し、プロジェクトのファルダーパスによっては最初に以下の警告がでますが、Yes とすると使用できる場合もあるようです。 ただこの場合、プロジェクト内の相対パスを記述している2つのconfigurations.xmlのファイルはもとのままとなっています。



<参考>
 ダウンロード用のサンプルプロジェクトは下記階層のフォルダで作成されています。

 


Q. Harmonyのマイクロチップサンプルソフトを階層が異なるフォルダにコピーした場合、MHCを動作させ、また再コンパイルできる方法をおしえてください
A. "C:\microchip\harmony\v2_03b\apps\fs\sqi_fat"
 上記の
spi_fatというフォルダには、マイクロチップのサンプルプロジェクトファイルがあります。 このspi_fatフォルダを以下のように harmonyからみてことなる階層のフォルダにコピーするとパスが通らないことから、プロジェクトのMHCが動作しなくなってコンパイルもできなくなってしまします。
"C:\microchip\harmony\v2_03b\apps\Folder1\Folder2\Folder3\spi_fat"

この例ではharmonyフォルダからみてspi_fatフォルダは2階層深いフォルダにコピーされています。
 この場合の対応について説明します。対策として コピー先のフォルダーにある2つのconfigurations.xmlと云うテキストファイルを修正する必要があります。
1つはnbproject\configurations.xmlで もう1つはsystem_config\カテゴリー名\configuration.xmlのconfigurations.xmlファイルです。 パスの深さ(階層)変更に伴う変更箇所はこの2つのファイルを修正するだけです。

"C:\microchip\harmony\v2_03b\apps\Folder1\Folder2\Folder3\sqi_fat\firmware\sqi_fat.X\nbproject\configurations.xml"
 上記のconfigurations.xmlをテキストエディタで開きます。
   <itemPath>../../../../../framework/driver/tmr/drv_tmr.h</itemPath>のようにパスを指定している部分に於いて
  <itemPath>../../../../../../../framework/driver/tmr/drv_tmr.h</itemPath>のように../を2つ追加します。


②1行づつ変更すると大変なのでテキストエディタの置換機能をつかいます。 すべて置換したらファイルを保存します。


C:\microchip\harmony\v2_03b\apps\Folder1\Folder2\Folder3\sqi_fat\firmware\src\system_config\pic32mz_ef_sk\configuration.xml"
同様に上記のconfigurations.xmlをテキストエディタで開きます。 下記のようにパスを指定している部分を
 <HarmonyPath dnOrder="0" path="../../.."/>から
 <HarmonyPath dnOrder="0" path="../../../../.."/>に../を2個追加します。(1ヶ所))
また
 <Library dnOrder="0" value="../../../../../bin/framework/peripheral/PIC32MZ2048EFM144_peripherals.a"/>から
 <Library dnOrder="0" value="../../../../../../../bin/framework/peripheral/PIC32MZ2048EFM144_peripherals.a"/>に../を2個追加します。(1ヶ所)


④各1ヶ所なので置換機能を利用しなくても簡単に置換できます。 置換したらファイルを保存します。


 (注)どちらのconfigurations.xmlファイルも修正箇所が何か所になるかはプロジェクトのファイルの内容次第です。system_config下にあるconfigurations.xmlファイルも修正箇所が3ヶ所以上になることもあります。
 

 Q. INT043(INT070)のプロジェクトファイルを再コンパイルしてしてタッチ動作も含めさせ特に不具合もなく動作させることができました。 ところがINT035のプロジェクトファイルを再コンパイルして動作させようとしたところ グラフィック液晶に表示はするのですがタッチ動作ができなくなってしまいました。 何故でしょうか?  どのように対処すればよいのでしょうか? 
 A. タッチ用ドライバーファイルdrv_touch_generic.h と drv_touch_generic.cを INT043(INT070)のプロジェクト作成の過程でINT043(INT070)用に変更した為 INT035のプロジェクトを立ち上げた際にINT043(INT070)用のドライバーが読み込まれてしまっている為です。 タッチ用ドライバーファイルdrv_touch_generic.h と drv_touch_generic.cをINT035用に変更してください。 
<注意><重要> 
drv_touch_generic.h と drv_touch_generic.cの変更内容は プロジェクトファイルには保存されません。 MHCのdrv_touch_generic.h と drv_touch_generic.cを直接書き換えることになります。(注1)  したがって異なるdrv_touch_generic.h と drv_touch_generic.c が必要となる下記の場合にはその都度 drv_touch_generic.h と drv_touch_generic.cを使用する液晶用に変更する必要があります。
 ①前回使用したタッチパネル液晶とは異なるタッチパネル液晶を使用する場合
 ②PCを変更した場合(Harmonyが変わった場合)
 ③Harmonyを再インストールした場合
 ④Harmonyのバージョンを変えた場合

 
(注1)タッチ用ドライバーファイルをフルパスで書くと以下となります。
  "C:\microchip\harmony\v2_04\framework\driver\touch\generic\drv_touch_generic.h"
  "C:\microchip\harmony\v2_04\framework\driver\touch\generic\src\drv_touch_generic.c"
(注2)drv_gfx_generic.h、drv_gfx_generic.c、gfx_driver_def.cの場合は変更したファイル内容がプロジェクトファイルの中に保存されます。従ってdrv_touch_generic.h と drv_touch_generic.cのような手間は発生しません。 このタッチ用ドライバーファイルの手間は Harmony v2.04のバグではないかと思っています。
 <グラフィック用ドライバーファイルのフルパス表示例>
"C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\08 043 Demo
  \firmware\src\system_config\default\framework\gfx\driver\controller\generic\drv_gfx_generic.h"
"C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\08 043 Demo
  \firmware\src\system_config\default\framework\gfx\driver\controller\generic\drv_gfx_generic.c"
"C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\08 043 Demo
  \firmware\src\system_config\default\framework\gfx\hal\gfx_driver_def.c"








Q.  評価ボードの回路図は 納品時に付属しますか ?
A.   付属しません。 回路図は以下のURLの中からダウンロードしてください。 必要であればPDFファイルからハードコピーをとってください。 回路図のダウンロードは評価ボードを購入しない方でもできます。

http://www.ys-labo.com/Shop/PIC32MZ_EvaluationB_Assy/EB_sum.html

下記部分です。
■ 回路図

  ■ 評価ボード全体
    PIC32MZ評価ボード MZ100-A001 全体の回路図(→PDFファイル)です。


  ■ キバン単体
    ① マザーボード回路図(→PDFファイル)
       マザーボード単体の回路図です。

    ②汎用モジュール評価ボード回路図(→PDFファイル)
      汎用モジュール評価ボード単体の回路図です。


Q.   SDカードの読み書きができません。 考えられる原因にどのようなものがありますか?
A ・ 書き込み速度が遅いSDカードでは読み書きができない場合があるようです。 経験では、Class⑩ではすべて読み下記ができています。
・ USBのMSDクラスのプログラムをPICに書き込んだ場合、 デバイスによっては PICkitの接続を遮断してまたPICの電源を一度OFFにしてから再度電源をONにしないとプログラムが有効にならない場合があるようです。
・ マイクロSDカードは スタンダード(サイズ)SDカードよりはるかに安定して読み書きができます。 HarmonyのSDライブラリはスタンダードSDカードの場合若干不安定といった感じを私はもっていいます。

 <追記>参照 → URL  

Q.   Harmony v2.04で、変化割込みを使用すると "リセットしないと動作を開始しない" と云うバグがあるようですが、対策があれば教えてください。
 A  Harmony v2.04には 変化割込みを使用するとしようするポートによっては 電源投入後プログラムを一度リセットしないと動作を開始しないと云うバグがあるようです。 
 対応としては、ソフトウェアリセットを行うと電源投入直後からPICが特に問題なく動作できます。 ソフトウェアリセットはどこでもよいわけではなく以下のように system_init.cのSYS_Initialize()の SYS_PORTS_Initialize(); 実行直後に行うとよいようです。 ソフトウェアリセットは電源投入後ソフトウェアリセットが行われていない場合だけ実行するようにします。 実験による試行錯誤の結果 発見したものです。 試した数個のプログラムではすべて有効でした。


           
   

void ysReset(void) { if(RCONbits.SWR == 0) //ソフトウェアリセットがされていない場合 { //アンロックシーケンス(unlock sequence) //★アンロックシーケンスがないと RSWRSTbits.SWRST = 1; は動作しない。 SYSKEY = 0; // Ensure OSCCON is locked SYSKEY = 0xAA996655; // Write Key1 to SYSKEY SYSKEY = 0x556699AA; // Write Key2 to SYSKEY RSWRSTbits.SWRST = 1; //ソフトウェアリセットトリガ //unlock sequenceの中で実行 //SOFTWARE RESET REGISTER // SWRST: Software Reset Trigger //1 = Enable software Reset event //0 = No effect RSWRST; //必須 } } void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)NULL); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); SYS_PORTS_Initialize(); //★★★ ysReset(); //バグ対策 //バグ:変化割込みのポートがあると、電源投入後リセットしないと動作しない /* Initialize Drivers */ sysObj.drvSDCard = DRV_SDCARD_Initialize(DRV_SDCARD_INDEX_0,(SYS_MODULE_INIT *)&drvSDCardInit); /*** SPI Driver Index 0 initialization***/ SYS_INT_VectorPrioritySet(DRV_SPI_TX_INT_VECTOR_IDX0, DRV_SPI_TX_INT_PRIORITY_IDX0); SYS_INT_VectorSubprioritySet(DRV_SPI_TX_INT_VECTOR_IDX0, DRV_SPI_TX_INT_SUB_PRIORITY_IDX0); SYS_INT_VectorPrioritySet(DRV_SPI_RX_INT_VECTOR_IDX0, DRV_SPI_RX_INT_PRIORITY_IDX0); SYS_INT_VectorSubprioritySet(DRV_SPI_RX_INT_VECTOR_IDX0, DRV_SPI_RX_INT_SUB_PRIORITY_IDX0); SYS_INT_VectorPrioritySet(DRV_DRV_SPI_ERROR_INT_VECTOR_IDX0, DRV_SPI_ERROR_INT_PRIORITY_IDX0); SYS_INT_VectorSubprioritySet(DRV_DRV_SPI_ERROR_INT_VECTOR_IDX0, DRV_SPI_ERROR_INT_SUB_PRIORITY_IDX0); sysObj.spiObjectIdx0 = DRV_SPI_Initialize(DRV_SPI_INDEX_0, (const SYS_MODULE_INIT * const)&drvSpi0InitData); /*** SPI Driver Index 1 initialization***/ sysObj.spiObjectIdx1 = DRV_SPI_Initialize(DRV_SPI_INDEX_1, (const SYS_MODULE_INIT * const)&drvSpi1InitData); sysObj.drvTmr0 = DRV_TMR_Initialize(DRV_TMR_INDEX_0, (SYS_MODULE_INIT *)&drvTmr0InitData); SYS_INT_VectorPrioritySet(INT_VECTOR_T1, INT_PRIORITY_LEVEL1); SYS_INT_VectorSubprioritySet(INT_VECTOR_T1, INT_SUBPRIORITY_LEVEL0); sysObj.drvUsart0 = DRV_USART_Initialize(DRV_USART_INDEX_0, (SYS_MODULE_INIT *)&drvUsart0InitData); SYS_INT_VectorPrioritySet(INT_VECTOR_UART4_TX, INT_PRIORITY_LEVEL1); SYS_INT_VectorSubprioritySet(INT_VECTOR_UART4_TX, INT_SUBPRIORITY_LEVEL0); SYS_INT_VectorPrioritySet(INT_VECTOR_UART4_RX, INT_PRIORITY_LEVEL1); SYS_INT_VectorSubprioritySet(INT_VECTOR_UART4_RX, INT_SUBPRIORITY_LEVEL0); SYS_INT_VectorPrioritySet(INT_VECTOR_UART4_FAULT, INT_PRIORITY_LEVEL1); SYS_INT_VectorSubprioritySet(INT_VECTOR_UART4_FAULT, INT_SUBPRIORITY_LEVEL0); /* Initialize System Services */ /*** File System Service Initialization Code ***/ SYS_FS_Initialize( (const void *) sysFSInit ); /*** Interrupt Service Initialization Code ***/ SYS_INT_Initialize(); /*** TMR Service Initialization Code ***/ sysObj.sysTmr = SYS_TMR_Initialize(SYS_TMR_INDEX_0, (const SYS_MODULE_INIT * const)&sysTmrInitData); /* Initialize Middleware */ /* Enable Global Interrupts */ SYS_INT_Enable(); /* Initialize the Application */ //ysReset(); //★ここではダメ APP_Initialize(); }





<追記>
 他の対処方法としては、以下のようなものもあります。 考え方としては CN(Change Notification)に関するコードはMHCを使わずに手書きすると云うものです。
具体的には、
1. MHCを用いて CNについてもチェックを入れソースコードを作成する。
2.  sys_ports_static.c のCNポートがあるポート設定を一式コピーしてapp.cのvoid APP_Initialize ( void )の中に貼り付ける。
3. system_config.hの中からCNを定義する部分をコピーして貼り付ける。すぐ上に #undef  を追記して 3.が読み込めるようにする。
4. CNについてのチェックをはずしてソースコードをgenerateする。
 詳細は 右記のプロジェクトファイル(→ URL)を精読願います。






 





Q.   Harmony Ver.2 から Harmony Ver.3に乗り替えましたが、 プロジェクトファイル生成の処理時間が非常に長くなって困っています。 何か対策はありますか?
A  私は、Harmony Ver.2から Ver.3に乗り替えたとき Ver.3はあまりにも遅いのでPCを買い替えました。 これにより処理速度は大幅に改善されストレスを感じることはなくなりました。
 主な変更点は以下です。
 ① CPU :  i 7 - 4790  →  i 7 - 9700K 
 ② RAM : 8GB → 32GB
 ③ OS・アプリケーションのインストール、 データの保存 : HDD → SSD

 やはり一番効果があったのは SSDの採用だろうと思っています。 SSDのread/Write速度も500 - 600MB/sec ~ 2500 - 3500MB/secとありましたが現時点で最速のものを選びました。
 以下に、Harmony Ver.3に係る新旧PCの処理時間を測定してみた実験結果です。 参考にしていただければ幸いです。

Harmony V.3 プロジェクトファイル 
 HDD搭載PC vs SSD搭載PC 処理時間比較実験

1.   要約 Harmony V.3プロジェクトファイルの処理時間改善のため HDD搭載PCからSSD搭載PCに買い替えしました。 SSD搭載化による処理時間の大幅改善を実験確認しましたので報告します。
2.   新旧PC諸元比較
   
項目 新パソコン(仮称:SSD PC)  旧パソコン(仮称:HDD PC) 備考
 CPU  i 7 - 9700K
( 64ビット、3.6GHz、8コア/8スレッド、キャッシュ 12MB)
  i 7 - 4790
(64ビット、3.60GHz、4コア/4スレッド、キャッシュ 8MB)
ドスパラCPU性能比較 
i7-9700K/i7-4790 =
2930/1440 = 2.03
 RAM  32 GB  8 GB RAM容量: 4倍 
 SSD  2TB (Samsung 970 EVO Plus 2TB)
 ・ NVMe、type 2280 M . 2
 ・ max速度 …… read 3500MB/s write 2500MB/s
 ・ OS,Harmonyインストール、  Harmonyデータ用 
 なし  
 HDD  4TB 5400rpm  SATA3  2TB 
 ・ 5400rpm  SATA3
 ・ OS,Harmonyインストール、 Harmonyデータ用 
 
 ソフトウェア
保存場所
動画データをHDDに保存する以外は、 OSを含めすべてSSDを使用 すべてHDDを使用   
メーカ  ドスパラ(秋葉原本店)オーダーメイド  HP  
購入年  2020年5月  2013年  
その他  ミニタワー型、 Windows 10 Home   ミニタワー型、 Windows 10 Home  
 
   
3.  実験結果
   
  実行
回数
処理時間   処理時間比  備考 
 HDD PC   SSD PC  SSD PC/HDD PC
ブランク
プロジェクトの
新規作成 (注1)
1個目 12分10秒  53秒 1/13.8 PC再起動後、新プロジェクト作成
2個目
以降
 1分05秒  40秒  1/1.6
1個目プロジェクトを閉じた後、別名の新プロジェクト作成
既存プロジェックトの
MHCを開く (注2)
1回目  4分56秒 32秒 1/9.3 PC再起動後、プロジェクト → MHCを開く
2回目
以降
 42秒 25秒 1/1.8 1回目開いたプロジェクトを閉じ、再び同じプロジェクトを開く
   
  (注1) ブランクプロジェクトの新規作成
       デバイス(PIC32MZ2048EFH100)設定 → コンパラ設定 → MHC立ち上げ
     
開始画面  →  完了画面

(注2) 既存プロジェクトのMHCを開く
     使用しているプロジェクトファイルは 下記パスのHarmony V.3のサンプルソフトuart_echoのPIC32MZ用です。
     "C:\Harmony3\core\apps\driver\usart\async\usart_echo\firmware\pic32mz_ef_sk.X"
     
開始画面  →  完了画面




Q. マイクロチップの評価ボードCuriosity PIC32MZ EF 2.0 Development Boardにプログラムが書き込めません。 対応は?
A.
① MPLABXで メニューから Tool  ->  Option で Optionダイアログを開きます。
② Embeddedアイコンをクリック -> Generic Settingsタブをクリックします。
③ Exclude device checks for Kits にチェックを追加します。





チェック追加前   チェック追加後
 → 




Q. Project ManifestのライブラリパッケージバージョンとLocal Packageのライブラリパッケージバージョンを同じにするにはどのようにすればよいのでしょうか?    
A.  例として core 3.9.2を core3.8.1に戻す場合についての手順を説明します。

1. Project Manifest(プロジェクトファイルで使用されているライブラリのバージョンリスト)とLokal Package(使用しているPCのディスク内にあり、使用しようとしているHarmonyのライブラリの集合体)を比較確認する。 2. Harmoy v3の Content Mangerを開く 3. Harmoy v3の Content Mangerが開くので Nextボタンをクリックする。  
 
4. Local Pakageボタンをクリックする。 5. Coreの右下の▼を右クリックしてドロップダウンリストをひらく。 リストの中からv3.8.1を選択する。 6. coreに係るフォルダに於いて、v3.8.1のファイルがダウンロードされると同時に v 3.9.2のファイルが削除される。  
 
   


 Q.  XC32 V.2.xxでは問題なかった 文字列を含む sprintf で、XC32 V.3xxでコンパイルエラーが発生した
 A.

① コンパイラが XC32 V2.xx の場合 以下のコードはコンパイル可能である。         

   
char Buf1[64];
char Buf2[64];

sprintf(Buf1,"How are you ?"); sprintf(Buf2,"I am fine. Answerfor (%s)", Buf1);
② しかし、 XC32 V3.xx でコンパイルすると 以下のようなエラーが発生する。 
   

../src/app.c:471:49: error: '%s' directive writing up to 63 bytes into a region of size 42 [-Werror=format-overflow=]
             sprintf(Buf2,"I am fine. Answerfor (%s)", Buf1);
                                                 ^~    ~~~~
../src/app.c:471:13: note: 'sprintf' output between 24 and 87 bytes into a destination of size 64
             sprintf(Buf2,"I am fine. Answerfor (%s)", Buf1);
③ char Buf2[64]  → char Buf2[128] に 修正するとコンパイルができる。
 XC32 V2.xx では、%s の所要メモリサイズはカウントされないが、XC32 V3.xx では %sは Buf[64] のサイズ、すなわち64バイトと コンパイラはカウントするようである。 したがって Buf2はその文を加味したメモリサイズが必要となる。